BigQuery Data Transfer Serviceを使ってS3からBigQueryへのデータを転送してみる
BigQuery Data Transfer Service は、あらかじめ設定されたスケジュールに基づき、BigQueryへのデータの移動を自動化するマネージドサービスです.
一つ前の記事でGlueを使ってデータを加工してS3に保存していましたが、
今回はそのデータをBigQueryに転送してデータを参照できる状態にしてみます。
やってみる
GCPのプロジェクトを用意し、BigQuery Data Transfer Service の有効化を行っていることを前提とします。
データセットの作成もあらかじめ行っておきましょう。
テーブルの作成
データセットのメニューから、テーブルの作成をクリックします。
Data Transfer Serviceを使ってデータ転送を行うため、ソースは空のテーブル
とします。
送信先では、プロジェクト、データセットを指定したあと、 テーブル名の入力を行いましょう。
S3に保存されているデータの例)
S3に保存されているデータに合わせてスキーマを作成します。
パーティショニングも可能ですが、今回は端折ります。
入力が終わったら、テーブルを作成 をクリックして終了です。
転送の作成
Data Transfer Serviceで転送の作成
をクリックして作成していきます。
ソースタイプはS3を選択しましょう。
構成名とスケジュールを入力していきます。
スケジュールは、 毎日/毎週/毎月/カスタム/オンデマンド
から選択できるので、用途に合わせて指定しましょう。
一旦テスト目的のため、今回はオンデマンドにしてみます。
転送先の設定のデータセットを選択後、データソースの詳細を入力していきます。
- Destination tableは事前に作成した読み込み先のテーブル名を入力します。
- S3から読み込むファイルのURLを入力します(s3:// から始まるURL)
- S3にアクセスする必要があるので、S3転送専用の固有のアクセスキーID とシークレットアクセスキーを作成し、その2つを入力します。
- File formatはS3に保存しているデータタイプと同じものを指定します。
Transfer Options
以下の設定は必要に応じて行います。
今回は不要なのでデフォルトの状態のままにし、転送を作成します。
転送の実行
転送の作成が完了すると、転送の詳細画面に遷移するので、その画面上にある今すぐ転送を実行
をクリックしてみます。
Run one time transfer
を選択してOKボタンをクリックします。
転送がスケジュールされるので、完了まで待っておきます。
転送が成功すると、緑のチェックマークがつきます。
転送が失敗した場合、以下のような原因が考えられるので、失敗した時は確認します。
- 宛先テーブルが存在しない
- テーブル スキーマが定義されていない
- テーブル スキーマと転送されるデータとの互換性がない
実行の詳細に転送のログも表示されるので、これも参考になります。
データの確認
転送が終了したら、テーブルに対してクエリを実行して中身を確認してみます。
上記のように、自身が意図している結果が表示されればOKです。
複数ファイルを転送して読み込むには?
先ほどの転送作成時にはS3 URLに単体ファイルのURLを指定しましたが、複数のファイルに分かれているデータになっている場合も多いかと思います。
そういったデータを転送するには、S3 URLに共通のプレフィックスの後に続けてワイルドカードを指定することで転送できます。
s3://my-bucket/my-folder/*
最後に
S3に保存されたデータをBigQueryへ転送する方法として、Data Transfer Serviceを使ってみました。
さまざまな場所に散らばっているデータを容易に転送できるのでとても便利なサービスだと思います。
AWSやAzureを利用しているがBigQueryを使いたいといったマルチクラウドのユースケースで重宝しそうです(まさに今)。